package com.example.housekeeping.service.impl;

import com.example.housekeeping.ex.ServiceException;
import com.example.housekeeping.pojo.entity.ServeKinds;
import com.example.housekeeping.pojo.dto.ServeKindsAddNewDTO;
import com.example.housekeeping.pojo.dto.ServeKindsUpdateDTO;
import com.example.housekeeping.pojo.vo.ServeKindsListItemVO;
import com.example.housekeeping.pojo.vo.ServeKindsStandardVO;
import com.example.housekeeping.mapper.ServeKindsMapper;
import com.example.housekeeping.service.ServeKindsService;
import com.example.housekeeping.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 服务种类(ServeKinds)表服务实现类
 *
 * @author bob
 * @since 2023-03-20 19:36:08
 */
@Slf4j
@Service
public class ServeKindsServiceImpl implements ServeKindsService {
    @Autowired
    private ServeKindsMapper serveKindsMapper;

    /**
     * 新增数据
     *
     * @param serveKindsAddNewDTO 实例对象
     * @return 实例对象
     */
    @Override
    public void addNew(ServeKindsAddNewDTO serveKindsAddNewDTO) {
        ServeKinds countServerkinds = new ServeKinds();
        countServerkinds.setName(serveKindsAddNewDTO.getName());
        long count = serveKindsMapper.count(countServerkinds);
        if (count>0){
            String message="添加类别失败，类别名称已被占用";
            log.debug("信息：{}",message);
            throw new ServiceException(ServiceCode.ERROR_CONFLICT,message);
        }
        ServeKinds serveKinds=new ServeKinds();
        BeanUtils.copyProperties(serveKindsAddNewDTO,serveKinds);
        serveKindsMapper.insert(serveKinds);

    }


    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public void deleteById(Long id) {
        log.debug("开始处理[根据id删除类别]的业务,参数{}",id);
        ServeKindsStandardVO serveKindsStandardVO=serveKindsMapper.getStandardById(id);
        if (serveKindsStandardVO==null){
            String message="删除类别失败,尝试删除的类别不存在!";
            log.warn("信息:{}",message);
        }
        int i = serveKindsMapper.deleteById(id);
    }

    /**
     * 修改数据
     *
     * @param serveKindsUpdateDTO 实例对象
     * @return 实例对象
     */
    @Override
    public void updateById(Long id, ServeKindsUpdateDTO serveKindsUpdateDTO) {
        log.debug("开始处理[修改类别详情]的业务,ID:{},新数据:{}",id,serveKindsUpdateDTO);
        ServeKindsStandardVO queryResult = serveKindsMapper.getStandardById(id);
        if (queryResult==null){
            String message = "修改类别详情失败,尝试修改的类别不存在!";
            log.warn("信息:{}",message);
            throw new ServiceException(ServiceCode.ERROR_NOT_FOUND,message);
        }
        int count =serveKindsMapper.countByNameAndNotId(id,serveKindsUpdateDTO.getName());
        if (count>0){
            String message="修改类别详情失败,类别名称已被占用!";
            log.warn("通知:{}",message);
            throw new ServiceException(ServiceCode.ERROR_CONFLICT,message);
        }
        ServeKinds serveKinds=new ServeKinds();
        BeanUtils.copyProperties(serveKindsUpdateDTO,serveKinds);
        serveKinds.setId(id);
        int rows=serveKindsMapper.update(serveKinds);
        if (rows !=1){
            String message="修改类别详情失败,服务器忙,请稍后再尝试";
            log.warn("通知:{}",message);
            throw new ServiceException(ServiceCode.ERROR_UPDATE,message);
        }


    }

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public ServeKindsStandardVO getStandardById(Long id) {
        log.debug("开始处理[根据ID查询类别详情]的业务,参数{}",id);
        ServeKindsStandardVO queryResult = serveKindsMapper.getStandardById(id);
        if (queryResult == null){
            String message="查询类别详情失败,类别数据不存在!";
            log.warn("通知:{}",message);

        }
        return queryResult;
    }

    /**
     * 查询列表数据
     *
     * @return 实例对象
     */
    @Override
    public List<ServeKindsListItemVO> list() {
        log.debug("开始处理查询所有类别的业务");
        List<ServeKindsListItemVO>list =serveKindsMapper.list();
        return list;
    }

}
